/** 
 * @main Plik naglowkowy interfejsu ObiektDyskretny, zawiera takze deklaracje 
 * funkcji pomocniczych.
 * @file    dyskretny.h
 * @author  Grzegorz Sejnota
 *
 * @created on 23 grudzien 2008, 13:41
 * @version 0.0001
 */


#ifndef _DYSKRETNY_H
#define	_DYSKRETNY_H

#include <string>
#include <vector>
#include <map>
#include "kolekcja.h"

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ POCZĄTEK [interfejsu ObiektDyskretny] +++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/**
 * Klasa czysto wirtualna (interfejs) obiektow dyskretnych. Implementuje metody typowe
 * dla tego typu obiektow.
 */
class ObiektDyskretny : public Kolekcja {
public:
    
    //======= funkcja wirtualna symuluj ============================================
	/**
	 * Funkcja symulujaca obiekt dyskretny - obliczajaca wyjscie z obiektu na 
	 * podstawie obecnego stanu wejscia u. 
	 *      @param u - skalarne wejscie obiektu
	 *      @return wyjscie z obiektu
	 */
    virtual double symuluj(double u) = 0;

	//======= funkcja wirtualna zmierzWyjscie =======================================
	/**
	 * Funkcja probkujaca ObiektARMAX. Funkcja symuluje dzialanie czujnika pomiarowego
	 * - pobiera wartosc wyjscia obiektu w kolejnej chwili czasu - przyszlej probce 
	 * przy zalozeniu braku zmiany sterowania.
	 *      @return przyszle wyjscie z obiektu
	 */
    virtual double zmierzWyjscie() = 0;
    
    //======= funkcja wirtualna symuluj ============================================
	/**
	 * Funkcja symulujaca obiekt dyskretny - obliczajaca wektor wyjscia z obiektu 
	 * na podstawie wektora wejść. 
	 *      @param u - wektor wejscia obiektu
	 *      @return wektor wyjscie z obiektu 
	 */
    //virtual std::vector<double> symuluj(const std::vector<double> & u) = 0;
    
    //======= funkcja wirtualna wypiszInfo =========================================
	/**
	 * Funkcja wypisujaca informacje o obiekcie dyskretnym. Implementacje funkcji 
	 * powinna wypisywac nazwe, typ oraz parametry obiektu dyskretnego.
	 */
    virtual void wypiszInfo() const = 0;
    
    //======= funkcja wirtualna wypiszInfo =========================================
	/**
	 * Funkcja pobierajaca nazwe obiektu dyskretnego.
	 */
    virtual std::string pobierzNazwe() const = 0;
    
    //======= funkcja wirtualna zerujPamiec ========================================
	/**
	 * Funkcja zerujaca pamiec obiektu dyskretnego.
	 */
    virtual void zerujPamiec() = 0;

	//======= funkcja wirtualna ustawParametry =====================================
	/**
	 * Funkcja ustawiajaca parametry obiektu dyskretnego z mapy.
	 */
	virtual bool ustawParametry(std::map< std::string, std::string >) = 0;

	//======= funkcja wirtualna pobierzParametry ===================================
	/**
	 * Funkcja zwracajaca mape parametrow zgodna z plikiem konfiguracyjnym.
	 */
	virtual std::map< std::string, std::string > pobierzParametry() const = 0;
};
//------------------------------------------------------------------------------
//-------------- KONIEC [interfejsu ObiektDyskretny] ---------------------------
//------------------------------------------------------------------------------

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ POCZĄTEK [klasy WyjatekPliku] +++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class WyjatekPliku{
public:
    WyjatekPliku(std::string blad){
        nazwa = blad;
    }
    std::string pobierzBlad(){
        return nazwa;
    }
private:
    std::string nazwa;   
};
//------------------------------------------------------------------------------
//-------------- KONIEC [klasy WyjatekPliku] -----------------------------------
//------------------------------------------------------------------------------


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ POCZĄTEK [funckcji pomocniczych] ++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

/* funkcja wczytujaca wymuszenie z pliku */
std::vector<double> wczytajWymuszenie( std::string );

/* funkcja zapisujaca wyjscie do pliku */
void zapiszWyjscie( const std::vector<double> &, std::string );

/* funkcja przeprowadzajaca pelna symulacje, z zapisem wyjscia do pliku */
bool przeprowadzSymulacje( ObiektDyskretny *, const std::vector<double> &);

//------------------------------------------------------------------------------
//-------------- KONIEC [funckcji pomocniczych] --------------------------------
//------------------------------------------------------------------------------

#endif	/* _DYSKRETNY_H */

